package java.util.stream.pool.demo1;

import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 可以控制线程运行的数量，处理过程中将任务放到队列中，然后在线程创建后启动这些任务，
 * 如果线程数量超过了最大数量，那么超出数量的线程就会排队等候，等其他线程执行完毕，再从队列中取出任务来执行。
 *
 * 主要特点为：
 *  1、降低资源消耗，通过重复利用已创建的线程创建和销毁造成的消耗。
 *  2、提供响应速度。当任务到达时，任务可以不需要等待线程创建，能够立即执行。
 *  3、提高线程的可管理性。线程是稀缺资源，如果无限制的创建，不仅会消耗系统资源，还会降低系统的稳定性.
 *      使用线程池可以进行统一的分配, 调优和监控。
 * @author fangjiaxiaobai@gmail.com
 * @date 2020-05-17
 * @since 1.0.0
 */
public class ThreadPoolDemo {
    public static void main(String[] args) {
        System.out.println("本机使用的核数："+Runtime.getRuntime().availableProcessors());

        /**
         * 一个线程池多个线程(执行长期任务，性能好)
         * 创建一个定长的线程池，可以控制线程最大并发数，超出的线程会在队列中等待。
         * 创建的线程池 corePoolSize和maximumPoolSize值是相等的。使用的LinkedBlockingQueue。
         */
        ExecutorService executorService1 = Executors.newFixedThreadPool(5);

        /**
         * 一个任务一个任务执行的场景
         */
        ExecutorService executorService2 = Executors.newSingleThreadExecutor();

        /**
         * 执行很多短期异步的小程序或者负载较轻松的服务。
         */
        ExecutorService executorService3 = Executors.newCachedThreadPool();

    }


}
